<!doctype html>
<html lang="zh-Hans">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no">
<meta name="hugo-theme" content="Axiom 0.7.1">



  <link rel="icon" type="image/png" sizes="32x32" href="/blog/">
  <link rel="icon" type="image/x-icon" href="/blog/">
  <link rel="apple-touch-icon" href="/blog/">
  <link rel="canonical" href="https://Mia-zhao.github.io/blog/posts/javascript-%E7%9A%84%E8%AF%9E%E7%94%9F/">
<link rel="preload" as="style" href="/blog/bundle.css?v=1598028633" media="all">
<link rel="stylesheet" href="/blog/bundle.css?v=1598028633" media="all">
<style>.cdata pre{color:#edf2f7;background-color:#2d3748}.cdata :not(pre)>code{color:#805ad5;background-color:#f7fafc}.chroma .err{color:#fed7d7;background-color:#9b2c2c}.chroma .hl{background-color:#4a5568}.chroma .ln{color:#a0aec0}.chroma .k,.chroma .kc,.chroma .kd,.chroma .kn,.chroma .kp,.chroma .kr{color:#63b3ed}.chroma .kt{color:#b794f4}.chroma .na{color:#f6e05e}.chroma .nb{color:#f6ad55}.chroma .nc{color:#fc8181}.chroma .no{color:#68d391}.chroma .nd{color:#fc8181}.chroma .ne{color:#fc8181}.chroma .nf{color:#f6ad55}.chroma .nt{color:#fc8181}.chroma .l{color:#b794f4}.chroma .dl,.chroma .ld,.chroma .s,.chroma .s2,.chroma .sa,.chroma .sb,.chroma .sc,.chroma .sd{color:#68d391}.chroma .se{color:#a0aec0}.chroma .s1,.chroma .sh,.chroma .si,.chroma .sr,.chroma .ss,.chroma .sx{color:#68d391}.chroma .il,.chroma .m,.chroma .mb,.chroma .mf,.chroma .mh,.chroma .mi,.chroma .mo{color:#b794f4}.chroma .o,.chroma .ow{color:#90cdf4}.chroma .p{color:#cbd5e0}.chroma .c,.chroma .c1,.chroma .ch,.chroma .cm,.chroma .cp,.chroma .cpf,.chroma .cs{color:#a0aec0}.chroma .ge{font-style:italic}.chroma .gs{font-weight:700}</style>



<title>JavaScript 的诞生 : Mia&#39;s Blog Posts</title>

<meta property="og:title" content="JavaScript 的诞生">
<meta property="og:site_name" content="Mia&#39;s Blog Posts">
<meta property="og:url" content="https://Mia-zhao.github.io/blog/posts/javascript-%E7%9A%84%E8%AF%9E%E7%94%9F/">
<link rel="image_src" href="https://Mia-zhao.github.io/blog/">
<meta property="og:image" content="https://Mia-zhao.github.io/blog/">
<meta property="og:image:width" content="">
<meta property="og:image:height" content="">
<meta property="og:type" content="article">
<meta property="og:locale" content="zh_Hans">
<meta property="og:description" content="这篇博文主要为了个人学习目的。此篇总结了JavaScript 历史, Javascript 诞生以及10个设计缺陷。 参考：  维基百科 JavaScript 阮一峰 《Javascript诞生记》 阮一峰 《Javascript的10个设计缺陷》  JavaScript 历史 1995年, 占据大部分浏览器市场的NetScape Communications公司招聘了Brendan Eich, 目标是将Scheme语言嵌入该公司的浏览器中。后来NetScape决定发明一种与Java搭配的辅助脚本语言。Eich花了十天设计出JavaScript原型。 JavaScript的推出大获成功, 微软随后为IE3推出JScript来同NetScape竞争。这一时期, JavaScript的标准尚未确立。1996年11月, NetScape向ECMA提交语言标准。1997年, 以JavaScript为基础制定的ECMAScript标准规范ECMA-262推出。JavaScript成为ECMAScript最著名的实现之一。 JavaScript 的诞生 NetScape在做网页脚本语言选择的决定时, 受到Sun公司推出Java的影响, 两家公司达成合作。允许Java程序以Applet形式在浏览器中运行, 网页脚本语言JavaScript须与Java相似。 Eich只花了十天时间设计JavaScript, 导致语言的一些细节不够严谨。Eich的设计思路如下：  借鉴C语言的基本语法 借鉴Java语言的数据类型和内存管理 借鉴Scheme语言, 将函数提升为first class地位 借鉴Self语言, 使用基于原型的继承机制  因此, JavaScript是函数式编程和面向对象编程的混合。 JavaScript 的10个设计缺陷  不适合开发大型程序  JavaScript没有namespace, 难以模块化 缺乏如何将代码分布在多个文件的规范   JavaScript标准函数库很小 null 和 undefined 容易混淆 全局变量难以控制  全局变量在所有模块可见 任何函数内部都可以生成全局变量   自动插入行尾分号  解释器不报错, 自动加分号    function(){return{i=1};}/*解析为function(){return;{i=1};}*/加号运算符既可表示数字运算也可以表示字符相连, 加剧运算复杂性 NaN (Not a Number) 特性不利于简化程序 难以区分数组和对象 == 和 === 判断结果不符合直觉 基本数据类型和其相应的对象类型区别不大却造成很大混淆  alert( typeof 1234); // numberalert( typeof new Number(1234)); // object尽管JavaScript有设计缺陷, 在第三方函数库的辅助下配合良好编程习惯, 大部分缺陷都能被回避。">
<meta name="description" content="这篇博文主要为了个人学习目的。此篇总结了JavaScript 历史, Javascript 诞生以及10个设计缺陷。 参考：  维基百科 JavaScript 阮一峰 《Javascript诞生记》 阮一峰 《Javascript的10个设计缺陷》  JavaScript 历史 1995年, 占据大部分浏览器市场的NetScape Communications公司招聘了Brendan Eich, 目标是将Scheme语言嵌入该公司的浏览器中。后来NetScape决定发明一种与Java搭配的辅助脚本语言。Eich花了十天设计出JavaScript原型。 JavaScript的推出大获成功, 微软随后为IE3推出JScript来同NetScape竞争。这一时期, JavaScript的标准尚未确立。1996年11月, NetScape向ECMA提交语言标准。1997年, 以JavaScript为基础制定的ECMAScript标准规范ECMA-262推出。JavaScript成为ECMAScript最著名的实现之一。 JavaScript 的诞生 NetScape在做网页脚本语言选择的决定时, 受到Sun公司推出Java的影响, 两家公司达成合作。允许Java程序以Applet形式在浏览器中运行, 网页脚本语言JavaScript须与Java相似。 Eich只花了十天时间设计JavaScript, 导致语言的一些细节不够严谨。Eich的设计思路如下：  借鉴C语言的基本语法 借鉴Java语言的数据类型和内存管理 借鉴Scheme语言, 将函数提升为first class地位 借鉴Self语言, 使用基于原型的继承机制  因此, JavaScript是函数式编程和面向对象编程的混合。 JavaScript 的10个设计缺陷  不适合开发大型程序  JavaScript没有namespace, 难以模块化 缺乏如何将代码分布在多个文件的规范   JavaScript标准函数库很小 null 和 undefined 容易混淆 全局变量难以控制  全局变量在所有模块可见 任何函数内部都可以生成全局变量   自动插入行尾分号  解释器不报错, 自动加分号    function(){return{i=1};}/*解析为function(){return;{i=1};}*/加号运算符既可表示数字运算也可以表示字符相连, 加剧运算复杂性 NaN (Not a Number) 特性不利于简化程序 难以区分数组和对象 == 和 === 判断结果不符合直觉 基本数据类型和其相应的对象类型区别不大却造成很大混淆  alert( typeof 1234); // numberalert( typeof new Number(1234)); // object尽管JavaScript有设计缺陷, 在第三方函数库的辅助下配合良好编程习惯, 大部分缺陷都能被回避。">
<meta property="og:updated_time" content="2020-08-07T04:12:00Z">
<meta property="fb:app_id" content="">
<meta name="author" content="Mia Zhao">
<meta property="article:author" content="https://Mia-zhao.github.io/blog/">
<meta property="article:published_time" content="2020-08-07T06:12:00Z">
<meta property="article:modified_time" content="2020-08-07T04:12:00Z">
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Article",
  "headline": "JavaScript 的诞生",
  "alternativeHeadline": "这篇博文主要为了个人学习目的。此篇总结了JavaScript 历史, Javascript 诞生以及10个设计缺陷。 参考：  维基百科 JavaScript 阮一峰 《Javascript诞生记》 阮一峰 《Javascript的10个设计缺陷》  JavaScript 历史 1995年, 占据大部分浏览器市场的NetScape Communications公司招聘了Brendan Eich, 目标是将Scheme语言嵌入该公司的浏览器中。后来NetScape决定发明一种与Java搭配的辅助脚本语言。Eich花了十天设计出JavaScript原型。 JavaScript的推出大获成功, 微软随后为IE3推出JScript来同NetScape竞争。这一时期, JavaScript的标准尚未确立。1996年11月, NetScape向ECMA提交语言标准。1997年, 以JavaScript为基础制定的ECMAScript标准规范ECMA-262推出。JavaScript成为ECMAScript最著名的实现之一。 JavaScript 的诞生 NetScape在做网页脚本语言选择的决定时, 受到Sun公司推出Java的影响, 两家公司达成合作。允许Java程序以Applet形式在浏览器中运行, 网页脚本语言JavaScript须与Java相似。 Eich只花了十天时间设计JavaScript, 导致语言的一些细节不够严谨。Eich的设计思路如下：  借鉴C语言的基本语法 借鉴Java语言的数据类型和内存管理 借鉴Scheme语言, 将函数提升为first class地位 借鉴Self语言, 使用基于原型的继承机制  因此, JavaScript是函数式编程和面向对象编程的混合。 JavaScript 的10个设计缺陷  不适合开发大型程序  JavaScript没有namespace, 难以模块化 缺乏如何将代码分布在多个文件的规范   JavaScript标准函数库很小 null 和 undefined 容易混淆 全局变量难以控制  全局变量在所有模块可见 任何函数内部都可以生成全局变量   自动插入行尾分号  解释器不报错, 自动加分号    function(){\rreturn\r{\ri=1\r};\r}\r/*\r解析为\rfunction(){\rreturn;\r{\ri=1\r};\r}\r*/\r加号运算符既可表示数字运算也可以表示字符相连, 加剧运算复杂性 NaN (Not a Number) 特性不利于简化程序 难以区分数组和对象 == 和 === 判断结果不符合直觉 基本数据类型和其相应的对象类型区别不大却造成很大混淆  alert( typeof 1234); // number\ralert( typeof new Number(1234)); // object\r尽管JavaScript有设计缺陷, 在第三方函数库的辅助下配合良好编程习惯, 大部分缺陷都能被回避。",
  "url": "https://Mia-zhao.github.io/blog/posts/javascript-%E7%9A%84%E8%AF%9E%E7%94%9F/",
  "image": "https://Mia-zhao.github.io/blog/",
  "mainEntityOfPage": {
    "@type": "WebPage",
    "@id": "https://Mia-zhao.github.io/blog/posts/javascript-%E7%9A%84%E8%AF%9E%E7%94%9F/"
  },
  "description": "这篇博文主要为了个人学习目的。此篇总结了JavaScript 历史, Javascript 诞生以及10个设计缺陷。 参考：  维基百科 JavaScript 阮一峰 《Javascript诞生记》 阮一峰 《Javascript的10个设计缺陷》  JavaScript 历史 1995年, 占据大部分浏览器市场的NetScape Communications公司招聘了Brendan Eich, 目标是将Scheme语言嵌入该公司的浏览器中。后来NetScape决定发明一种与Java搭配的辅助脚本语言。Eich花了十天设计出JavaScript原型。 JavaScript的推出大获成功, 微软随后为IE3推出JScript来同NetScape竞争。这一时期, JavaScript的标准尚未确立。1996年11月, NetScape向ECMA提交语言标准。1997年, 以JavaScript为基础制定的ECMAScript标准规范ECMA-262推出。JavaScript成为ECMAScript最著名的实现之一。 JavaScript 的诞生 NetScape在做网页脚本语言选择的决定时, 受到Sun公司推出Java的影响, 两家公司达成合作。允许Java程序以Applet形式在浏览器中运行, 网页脚本语言JavaScript须与Java相似。 Eich只花了十天时间设计JavaScript, 导致语言的一些细节不够严谨。Eich的设计思路如下：  借鉴C语言的基本语法 借鉴Java语言的数据类型和内存管理 借鉴Scheme语言, 将函数提升为first class地位 借鉴Self语言, 使用基于原型的继承机制  因此, JavaScript是函数式编程和面向对象编程的混合。 JavaScript 的10个设计缺陷  不适合开发大型程序  JavaScript没有namespace, 难以模块化 缺乏如何将代码分布在多个文件的规范   JavaScript标准函数库很小 null 和 undefined 容易混淆 全局变量难以控制  全局变量在所有模块可见 任何函数内部都可以生成全局变量   自动插入行尾分号  解释器不报错, 自动加分号    function(){\rreturn\r{\ri=1\r};\r}\r/*\r解析为\rfunction(){\rreturn;\r{\ri=1\r};\r}\r*/\r加号运算符既可表示数字运算也可以表示字符相连, 加剧运算复杂性 NaN (Not a Number) 特性不利于简化程序 难以区分数组和对象 == 和 === 判断结果不符合直觉 基本数据类型和其相应的对象类型区别不大却造成很大混淆  alert( typeof 1234); // number\ralert( typeof new Number(1234)); // object\r尽管JavaScript有设计缺陷, 在第三方函数库的辅助下配合良好编程习惯, 大部分缺陷都能被回避。",
  "author": {
    "@type": "Person",
    "name": "Mia Zhao"
  },
  "publisher": {
    "@type": "Organization",
    "name": "Mia's Blog Posts",
    "logo": {
      "@type": "ImageObject",
      "url": "https://Mia-zhao.github.io/blog/"
    }
  },
  "datePublished": "2020-08-07T06:12:00Z",
  "dateModified": "2020-08-07T04:12:00Z",
  "articleBody": "\u003cp\u003e这篇博文主要为了个人学习目的。此篇总结了JavaScript 历史, Javascript 诞生以及10个设计缺陷。\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e参考：\u003c/em\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cem\u003e\u003ca href=\"https://zh.wikipedia.org/zh-cn/JavaScript#%E5%8E%86%E5%8F%B2\"\u003e维基百科 JavaScript\u003c/a\u003e\u003c/em\u003e\u003c/li\u003e\n\u003cli\u003e\u003cem\u003e\u003ca href=\"http://www.ruanyifeng.com/blog/2011/06/birth_of_javascript.html\"\u003e阮一峰 《Javascript诞生记》\u003c/a\u003e\u003c/em\u003e\u003c/li\u003e\n\u003cli\u003e\u003cem\u003e\u003ca href=\"http://www.ruanyifeng.com/blog/2011/06/10_design_defects_in_javascript.html\"\u003e阮一峰 《Javascript的10个设计缺陷》\u003c/a\u003e\u003c/em\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"javascript-历史\"\u003eJavaScript 历史\u003c/h2\u003e\n\u003cp\u003e1995年, 占据大部分浏览器市场的NetScape Communications公司招聘了\u003ca href=\"https://en.wikipedia.org/wiki/Brendan_Eich\"\u003eBrendan Eich\u003c/a\u003e, 目标是将Scheme语言嵌入该公司的浏览器中。后来NetScape决定发明一种与Java搭配的辅助脚本语言。Eich花了十天设计出JavaScript原型。\u003cbr\u003e\n\u003cbr\u003e\nJavaScript的推出大获成功, 微软随后为IE3推出JScript来同NetScape竞争。这一时期, JavaScript的标准尚未确立。1996年11月, NetScape向ECMA提交语言标准。1997年, 以JavaScript为基础制定的\u003ca href=\"https://en.wikipedia.org/wiki/ECMAScript\"\u003eECMAScript\u003c/a\u003e标准规范ECMA-262推出。JavaScript成为ECMAScript最著名的实现之一。\u003c/p\u003e\n\u003ch2 id=\"javascript-的诞生\"\u003eJavaScript 的诞生\u003c/h2\u003e\n\u003cp\u003eNetScape在做网页脚本语言选择的决定时, 受到Sun公司推出Java的影响, 两家公司达成合作。允许Java程序以Applet形式在浏览器中运行, 网页脚本语言JavaScript须与Java相似。\u003c/p\u003e\n\u003cp\u003eEich只花了十天时间设计JavaScript, 导致语言的一些细节不够严谨。Eich的设计思路如下：\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e借鉴C语言的基本语法\u003c/li\u003e\n\u003cli\u003e借鉴Java语言的数据类型和内存管理\u003c/li\u003e\n\u003cli\u003e借鉴Scheme语言, 将函数提升为first class地位\u003c/li\u003e\n\u003cli\u003e借鉴Self语言, 使用基于原型的继承机制\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003e因此, JavaScript是函数式编程和面向对象编程的混合。\u003c/p\u003e\n\u003ch2 id=\"javascript-的10个设计缺陷\"\u003eJavaScript 的10个设计缺陷\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003e不适合开发大型程序\n\u003cul\u003e\n\u003cli\u003eJavaScript没有namespace, 难以模块化\u003c/li\u003e\n\u003cli\u003e缺乏如何将代码分布在多个文件的规范\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eJavaScript标准函数库很小\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003enull\u003c/code\u003e 和 \u003ccode\u003eundefined\u003c/code\u003e 容易混淆\u003c/li\u003e\n\u003cli\u003e全局变量难以控制\n\u003cul\u003e\n\u003cli\u003e全局变量在所有模块可见\u003c/li\u003e\n\u003cli\u003e任何函数内部都可以生成全局变量\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e自动插入行尾分号\n\u003cul\u003e\n\u003cli\u003e解释器不报错, 自动加分号\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ol\u003e\n\u003cpre\u003e\u003ccode\u003efunction(){\r\n　　return\r\n　　　　{\r\n    　　　　i=1\r\n　　　　};\r\n}\r\n/*\r\n解析为\r\nfunction(){\r\n　　return;\r\n　　　　{\r\n    　　　　i=1\r\n　　　　};\r\n}\r\n*/\r\n\u003c/code\u003e\u003c/pre\u003e\u003col start=\"6\"\u003e\n\u003cli\u003e加号运算符既可表示数字运算也可以表示字符相连, 加剧运算复杂性\u003c/li\u003e\n\u003cli\u003eNaN (Not a Number) 特性不利于简化程序\u003c/li\u003e\n\u003cli\u003e难以区分数组和对象\u003c/li\u003e\n\u003cli\u003e== 和 === 判断结果不符合直觉\u003c/li\u003e\n\u003cli\u003e基本数据类型和其相应的对象类型区别不大却造成很大混淆\u003c/li\u003e\n\u003c/ol\u003e\n\u003cpre\u003e\u003ccode\u003ealert( typeof 1234); // number\r\nalert( typeof new Number(1234)); // object\r\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e尽管JavaScript有设计缺陷, 在第三方函数库的辅助下配合良好编程习惯, 大部分缺陷都能被回避。\u003c/p\u003e"
}
</script>

<link rel="preload" as="script" href="/blog/bundle.js?v=1598028633">


</head>
<body>

  <header id="nav" class="header">
  <div class="ax-l-i max-w-6xl">
    <div class="ax-logo">
      <a class="block" href="/blog/" title="Mia&#39;s Blog Posts"><span class="font-semibold text-raven-900">Mia's Blog Posts</span></a>
    </div>
    <div class="ax-user">
      <a class="p-2 w-8 h-8 block text-raven-500 hover:text-gray-800 focus:text-gray-800 focus:outline-none" target="_blank" rel="noopener nofollow" href="https://www.google.com/search?q=site:https://Mia-zhao.github.io/blog/" title="Search">
        <svg class="fill-current" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M2.67 12.804c0-5.6 4.544-10.134 10.133-10.134s10.134 4.544 10.134 10.134-4.544 10.133-10.134 10.133S2.67 18.393 2.67 12.804zm28.943 16.923l-8.868-8.868c4.287-5.3 3.68-13.012-1.378-17.57S8.564-1.066 3.75 3.75s-5.017 12.558-.46 17.618 12.28 5.665 17.57 1.378l8.868 8.868a1.33 1.33 0 0 0 2.231-.597c.123-.46-.008-.952-.345-1.29h0z"/></svg>

      </a>
    </div>
  </div>

  
</header>

  <main>
<div class="default-single">
  <div class="ax-title ax-l-o">
    <div class="ax-l-i max-w-680">
      <h1 class="post-title font-content-title font-normal leading-tight tracking-default text-40">JavaScript 的诞生</h1>

      <div class="ax-meta flex items-center mt-5">
        <div class="flex-grow min-w-0">
          <div class="flex items-center">
  <div class="flex-shrink-0">
    <img
    class="w-12 h-12 sm:w-14 sm:h-14 object-cover p-3px rounded-full border border-blue-300"
    src="/blog/images/author/default.webp"
    alt="Mia Zhao">
  </div>
  <div class="flex-shrink-0 ml-2 leading-tight font-content-sans">
    <a class="block text-sm text-raven-800 hover:text-raven-900 hover:underline focus:underline" target="_blank" rel="noopener nofollow" title="Mia Zhao" href="https://Mia-zhao.github.io/blog/">Mia Zhao</a>
    <time class="text-sm text-raven-500" datetime="2020-08-07T06:12:00Z">Aug 7, 2020 2:12PM</time>
  </div>
</div>

        </div>
        <div>
          <div class="flex items-center">
  <a class="flex-shrink-0 block text-raven-800 hover:text-raven-900" target="_blank" rel="noopener nofollow" title="Share on Twitter" href="https://twitter.com/intent/tweet?text=JavaScript%20%e7%9a%84%e8%af%9e%e7%94%9f%20by%20%40%25%21s%28%3cnil%3e%29%20https%3a%2f%2fMia-zhao.github.io%2fblog%2fposts%2fjavascript-%25E7%259A%2584%25E8%25AF%259E%25E7%2594%259F%2f"><svg class="w-6 h-6 fill-current" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M32 6.078c-1.2.522-2.458.868-3.78 1.036 1.36-.812 2.398-2.088 2.886-3.626a13.11 13.11 0 0 1-4.16 1.588C25.742 3.794 24.026 3 22.154 3a6.56 6.56 0 0 0-6.556 6.562c0 .52.044 1.02.152 1.496-5.454-.266-10.28-2.88-13.522-6.862-.566.982-.898 2.106-.898 3.316a6.57 6.57 0 0 0 2.914 5.452 6.48 6.48 0 0 1-2.964-.808v.072c0 3.188 2.274 5.836 5.256 6.446-.534.146-1.116.216-1.72.216-.42 0-.844-.024-1.242-.112.85 2.598 3.262 4.508 6.13 4.57a13.18 13.18 0 0 1-8.134 2.798c-.538 0-1.054-.024-1.57-.1C2.906 27.93 6.35 29 10.064 29c12.072 0 18.672-10 18.672-18.668 0-.3-.01-.57-.024-.848C30.014 8.56 31.108 7.406 32 6.078z"/></svg>
</a>
  <a class="ml-3 flex-shrink-0 block text-raven-800 hover:text-raven-900" target="_blank" rel="noopener nofollow" title="Share on Facebook" href="https://www.facebook.com/dialog/share?app_id=&display=page&href=https%3a%2f%2fMia-zhao.github.io%2fblog%2fposts%2fjavascript-%25E7%259A%2584%25E8%25AF%259E%25E7%2594%259F%2f"><svg class="w-6 h-6 fill-current" viewBox="-7 -3.5 39 39" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M30.234 0H1.765C.8.001 0 .79 0 1.766v28.47C.001 31.2.79 32 1.766 32h15.328V19.625h-4.156V14.78h4.156v-3.564c0-4.134 2.523-6.384 6.21-6.384 1.766 0 3.284.13 3.726.2v4.32h-2.543c-2.006 0-2.394.953-2.394 2.352v3.085h4.797l-.625 4.844h-4.172V32h8.14C31.21 32 32 31.2 32 30.234V1.765C32 .8 31.21 0 30.234 0z"/></svg>
</a>
</div>

        </div>
      </div>
    </div>
  </div><div class="ax-content ax-l-o">
    <div class="ax-l-i max-w-680">
      <article class="cdata">
<p>这篇博文主要为了个人学习目的。此篇总结了JavaScript 历史, Javascript 诞生以及10个设计缺陷。</p>
<p><em>参考：</em></p>
<ul>
<li><em><a href="https://zh.wikipedia.org/zh-cn/JavaScript#%E5%8E%86%E5%8F%B2">维基百科 JavaScript</a></em></li>
<li><em><a href="http://www.ruanyifeng.com/blog/2011/06/birth_of_javascript.html">阮一峰 《Javascript诞生记》</a></em></li>
<li><em><a href="http://www.ruanyifeng.com/blog/2011/06/10_design_defects_in_javascript.html">阮一峰 《Javascript的10个设计缺陷》</a></em></li>
</ul>
<h2 id="javascript-历史">JavaScript 历史</h2>
<p>1995年, 占据大部分浏览器市场的NetScape Communications公司招聘了<a href="https://en.wikipedia.org/wiki/Brendan_Eich">Brendan Eich</a>, 目标是将Scheme语言嵌入该公司的浏览器中。后来NetScape决定发明一种与Java搭配的辅助脚本语言。Eich花了十天设计出JavaScript原型。<br>
<br>
JavaScript的推出大获成功, 微软随后为IE3推出JScript来同NetScape竞争。这一时期, JavaScript的标准尚未确立。1996年11月, NetScape向ECMA提交语言标准。1997年, 以JavaScript为基础制定的<a href="https://en.wikipedia.org/wiki/ECMAScript">ECMAScript</a>标准规范ECMA-262推出。JavaScript成为ECMAScript最著名的实现之一。</p>
<h2 id="javascript-的诞生">JavaScript 的诞生</h2>
<p>NetScape在做网页脚本语言选择的决定时, 受到Sun公司推出Java的影响, 两家公司达成合作。允许Java程序以Applet形式在浏览器中运行, 网页脚本语言JavaScript须与Java相似。</p>
<p>Eich只花了十天时间设计JavaScript, 导致语言的一些细节不够严谨。Eich的设计思路如下：</p>
<ol>
<li>借鉴C语言的基本语法</li>
<li>借鉴Java语言的数据类型和内存管理</li>
<li>借鉴Scheme语言, 将函数提升为first class地位</li>
<li>借鉴Self语言, 使用基于原型的继承机制</li>
</ol>
<p>因此, JavaScript是函数式编程和面向对象编程的混合。</p>
<h2 id="javascript-的10个设计缺陷">JavaScript 的10个设计缺陷</h2>
<ol>
<li>不适合开发大型程序
<ul>
<li>JavaScript没有namespace, 难以模块化</li>
<li>缺乏如何将代码分布在多个文件的规范</li>
</ul>
</li>
<li>JavaScript标准函数库很小</li>
<li><code>null</code> 和 <code>undefined</code> 容易混淆</li>
<li>全局变量难以控制
<ul>
<li>全局变量在所有模块可见</li>
<li>任何函数内部都可以生成全局变量</li>
</ul>
</li>
<li>自动插入行尾分号
<ul>
<li>解释器不报错, 自动加分号</li>
</ul>
</li>
</ol>
<pre><code>function(){
　　return
　　　　{
    　　　　i=1
　　　　};
}
/*
解析为
function(){
　　return;
　　　　{
    　　　　i=1
　　　　};
}
*/
</code></pre><ol start="6">
<li>加号运算符既可表示数字运算也可以表示字符相连, 加剧运算复杂性</li>
<li>NaN (Not a Number) 特性不利于简化程序</li>
<li>难以区分数组和对象</li>
<li>== 和 === 判断结果不符合直觉</li>
<li>基本数据类型和其相应的对象类型区别不大却造成很大混淆</li>
</ol>
<pre><code>alert( typeof 1234); // number
alert( typeof new Number(1234)); // object
</code></pre><p>尽管JavaScript有设计缺陷, 在第三方函数库的辅助下配合良好编程习惯, 大部分缺陷都能被回避。</p>

      </article>
      

      

    </div>
  </div>
</div>

  </main>
  <footer class="footer">
  <div class="ax-l-i max-w-6xl">
    <nav class="flex items-center justify-center">
    </nav>

    <div class="footer-copyright text-sm text-center text-gray-500 mt-4">
      &#169; -2020 Mia&#39;s Blog Posts
    </div>
    <div class="text-sm sm:text-xs text-center text-gray-500 mt-2">
      Powered by <a href="https://www.axiomtheme.com/?utm_source=theme-footer&utm_medium=website&utm_campaign=referral">Axiom</a>
    </div>
  </div>
</footer>

<script src="/blog/bundle.js?v=1598028633"></script>


</body>
</html>
